#include <stdio.h>

// 数组传进来，丢失的是容量(a[2]的)

// 二维数组作为参数传递，变成了数组指针
void PrintArray(int (*a)[3], int size) // 本质a[2]是数组
{
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%p ", &a[i][j]);
        }
        printf("\n");
    }
}

// 二维数组的赋值
int main()
{
    int a[2][3] =
    {
        {1, 2, 3},
        {4, 5, 6}
    };  
    // printf("%ld\n", sizeof(a)); // 6*4

    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            // printf("%d ",a[i][j]);
            printf("%p ", &a[i][j]);
        }
        printf("\n");
    }//封装为函数
    // PrintArray(a,2);

    // printf("%p %p %p\n",a,&a,a[0]);
    // printf("%p %p %p\n",a+1,&a+1,a[0]+1);//+12 +24 +4

    // printf("%d\n", **(a + 1));    //输出4 //*(a+1):第二个一维数组的首地址
    // printf("%d\n", **(a + 1) + 1);  //输出5 

    // int(*p)[3] = a;
    // printf("%d\n", *p[1]);           // 4  **(p+1)
    // printf("%d\n", *(*(p + 1) + 1)); // 5  p[1][1]

    // int(*p)[2] = a;                  // 内存在哪，指针就指向哪
    // printf("%d\n", *(*(p + 1) + 1)); // 4   p+1：走两个数据类型；

    // int *p = a;           //指针数组
    // printf("%d\n", *p);   // 1  和左边指针如何动
    // printf("%d\n", *p+1); // 2
    // printf("%d\n", *p+4); // 5  不推荐这种，因为不知道边界


}
